今天會帶你走進顏色與圖片的世界,介紹顏色的分法種類與圖片的構成基本元素。
我們所看到的每一張圖片都是由一個一個小方格所構成,由於這些方格非常小,因此我們肉眼可能看到的是連續的顏色變化,但實際上每個方格都只有單一顏色。也就是說,實際上圖片是由一個一個非連續的小方格構成,像是馬賽克拼貼一樣。
一個小方格我們稱為一個像素,是構成數位圖片最小的單位,每個像素的顏色由本身的顏色通道值所決定。通常一個像素有1~4個通道,通道數量取決於選擇的色彩模式。
在灰階圖片裡,每個像素只有一個通道,量值為0~255。0代表黑色,255代表白色,中間值代表依比例混合黑色與白色,也就構成了深淺不同的像素。
每個像素由3個通道組成,分別為紅色(Red)、綠色(Green)、藍色(Blue),每個通道皆是0~255的值。以紅色通道為例,0代表黑色,255代表純紅色,另外兩個通道也是依此類推,值愈大代表強度愈強。當三個通道疊在一起時,將會出現我們人類肉眼看到的彩色圖片。
OpenCV中使用的預設顏色模式,原理與RGB類似,只是疊起來的順序不同。BGR從上到下為藍色、綠色、紅色。
在 RGB 或 BGR 基礎上增加了一個 Alpha (A)通道,用於表示透明度。A值為0時表示透明度為0,與正常照片一樣;A值為255時,表示全透明,完全看不到圖片。
基於實際應用層面,有些時候我們可能需要抓取特定顏色範圍內的物體,此時使用HSV會比較方便。HSV把顏色分為色調(Hue)、飽和度(Saturation)、明度(Value)。
H是從0~179的值,代表不同色調、色相;S是0~255的值,0代表非常接近白色,255代表該顏色飽和度很高;V是0~255的值,0代表黑色,255代表接近純色。下面這張圖可以清楚表示HSV的概念。
HSL與HSV類似,只是最後一個通道換成了亮度(Lightness),純色時亮度為50%。HSL常用於設計和圖形應用中,因為亮度更符合人類對顏色的感知,調整顏色的亮度更直觀。
CMYK(青色(Cyan)、品紅色(Magenta)、黃色(Yellow)、黑色(Key))顏色模式是一種減色模式,主要用於印刷領域。它基於吸收和減少光線的原理來創建顏色,適合在紙張等反射性介質上使用。
在影像處理上不常用CMYK顏色模式,openCV也沒有可以直接讀取到CMYK模式的函式,需要自己寫兩層迴圈手刻。
針對常見的顏色模式,OpenCV有內建函式可以互相轉換。cv2.cvtColor(圖片,色彩轉換模式)
會回傳一個已經轉換好的圖片矩陣。
色彩轉換模式OpenCV提供了143種選擇,在官方文件中可以找到。第二個參數可以輸入阿伯數字代號,也可以打出大寫的英文名稱。
這裡提供一個小範例供大家練習RGB與HSV、HSL之間的轉換。
import cv2
# 讀取RGB圖片
image_rgb = cv2.imread('lenna.jpg')
# 轉換為HSV模式
image_hsv = cv2.cvtColor(image_rgb, cv2.COLOR_BGR2HSV)
# 轉換為HSL模式
image_hsl = cv2.cvtColor(image_rgb, cv2.COLOR_BGR2HLS)
# 顯示原圖和轉換後的圖片
cv2.imshow('Original Image', image_rgb)
cv2.imshow('HSV Image', image_hsv)
cv2.imshow('HSL Image', image_hsl)
cv2.waitKey(0)
cv2.destroyAllWindows()
今天的分享就到這邊結束,希望大家有學到在電腦世界中顏色的分類方法以及操作方法。